// // const arr = [1, 2, 3, 4, 5];

// // // const arr1 = arr.map(Math.max); // [1, 2, 3, 4, 5] [NaN, NaN, NaN, NaN, NaN]

// // const arr2 = arr.map(function (...args) {
// //     console.log(args);
// //     return Math.max(item, i, arr);
// // });

// // // console.log(arr.map(Math.pow));

// function Parent () {
//     this.name = 'zhangsan';
//     this.sayhhhh = function () {
//         console.log('hello');
//     };
// }

// Parent.prototype.sayHi = function () {
//     console.log('hi');
// }

// // 组合继承
// function Child () {
//     Parent.call(this); // 继承构造函数中的所有和this有关内容
// }

// // 拼接对象
// // Object.assign(合并的目标, 被合并的对象)
// Child.prototype = Object.assign(Child.prototype, Parent.prototype);

// Child.prototype.sayHello = function () {
//     console.log('hello');
// }

// const instance = new Child();
// const p = new Parent();

// // console.log(instance.name);

// // instance.sayHi();
// // p.sayHello();
// // instance.sayHello();

// // Object.keys()  Object.values()  Object.assign()

// console.log(Child.prototype.constructor);

class Animal {
    constructor (name) {
        this.name = name;
    }
    sayHi () {
        console.log('hi, my name is ' + this.name);
    }
}

class Dog extends Animal {
    constructor (type, name) {
        super(name);
        this.type = type;
    }
    sayWangWang () {
        console.log('wangwang');
    }
}

const dog = new Dog('二哈', '嘿嘿');
dog.sayHi(); // hi, my name is 嘿嘿
